/*
 * File:   Properties.h
 * Author: jcrada
 *
 * Created on 15 November 2012, 10:44 AM
 */

#ifndef ECB_PROPERTIES_H
#define	ECB_PROPERTIES_H

#include "ecb/scalar.h"
#include <string>

#include <cmath>

namespace ecb {

    class Properties {
    protected:
        std::string _id, _name;
        int _dimensions;
        scalar _minimum, _maximum;
        bool _minimization;

    public:
        Properties(const std::string& id = "", const std::string& name = "",
                int dimensions = 0, scalar minimum = -INFINITY, scalar maximum = INFINITY,
                bool minimization = true);

        virtual ~Properties();

        virtual void setId(const std::string& id);
        virtual std::string getId() const;

        virtual void setName(const std::string& name);
        virtual std::string getName() const;

        virtual void setMinMax(scalar min, scalar max);

        virtual void setMinimum(scalar minimum);
        virtual scalar getMinimum() const;

        virtual void setMaximum(scalar maximum);
        virtual scalar getMaximum() const;

        virtual void setDimensions(int dimensions);
        virtual int getDimensions() const;

        virtual void setMinimization(bool minimization);
        virtual bool isMinimization() const;

        virtual void setMaximization(bool maximization);
        virtual bool isMaximization() const;

        virtual std::string toString() const;

    };

}

#endif	/* ECB_PROPERTIES_H */

